package com.continuing.beef.service;

import com.continuing.beef.domain.ClientUser;
import com.continuing.beef.mapper.BeeflCommonMapper;
import com.continuing.beef.utils.DomainUtils;
import com.continuing.common.constant.HttpStatus;
import com.continuing.common.core.domain.entity.SysDept;
import com.continuing.common.exception.ServiceException;
import com.continuing.system.mapper.SysDeptMapper;
import com.continuing.system.mapper.SysUserMapper;
import com.continuing.system.service.ISysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

@Service
public class BeefCommonService {


    @Autowired
    private ISysDeptService iSysDeptService;


    @Autowired
    private SysDeptMapper sysDeptMapper;

    @Autowired
    private SysUserMapper sysUserMapper;

    @Autowired
    private BeeflCommonMapper beeflCommonMapper;


    /**
     * 根据传入的deptId 获取 类型所属公司 的部门id
     *
     * @param nowDeptId 传入的部门id
     * @return 所属公司的部门id   (公司级别的部门)
     */
    public Long getFirmDeptIdByDeptId(Long nowDeptId) {

        // 根据登录人的部门进行筛选
        List<SysDept> sysDepts = iSysDeptService.selectDeptListBySonId(
                DomainUtils.setValueToSysDept(nowDeptId, "1")
        );

        // 如果查询出来多个可配置类型使用的部门id则说明配置有误
        if (sysDepts == null || sysDepts.size() != 1) {
            throw new ServiceException("获取公司级别部门失败，未配置所属公司或配置多个所属公司", HttpStatus.ERROR);
        }

        return sysDepts.get(0).getDeptId();
    }

    /**
     * 根据部门id获得其所属公司 客户部门 的deptId
     *
     * @param nowDeptId
     * @return
     */
    public Long getClientDeptIdByNowDeptId(Long nowDeptId) {

        // 获得所属公司的id
        Long firmDeptId = getFirmDeptIdByDeptId(nowDeptId);

        // 查询公司下面为客户的部门id
        List<SysDept> sysDepts = sysDeptMapper.selectDeptList(
                DomainUtils.setValueToSysDept(null, null, "1", firmDeptId)
        );

        if (sysDepts == null || sysDepts.size() != 1) {
            throw new ServiceException("获取客户级别部门失败，未配置客户部门或配置多个客户部门", HttpStatus.ERROR);
        }


        return sysDepts.get(0).getDeptId();
    }


    /**
     * 查询客户信息
     */
    public List<ClientUser> clientUser(Long deptId) {

        return beeflCommonMapper.selectclientUserList(
                // 查询出客户部门的id
                getClientDeptIdByNowDeptId(deptId)
        );

    }


    /**
     * 根据用户id获取用户姓名
     *
     * @param userId 用户id
     * @return userNickName
     */
    public String getNickNameByUserId(Long userId) {
        return sysUserMapper.selectUserById(userId).getNickName();
    }

    /**
     * 金额的比较（金额同付款金额与优惠金额的和做比较）
     *
     * @param sum         金额
     * @param sumDiscount 优惠金额
     * @param sumPayment  付款金额
     * @return 1 大于 0 等于 -1 小于
     */
    public Integer compareSum(BigDecimal sum,
                              BigDecimal sumDiscount,
                              BigDecimal sumPayment) {

        if (sumDiscount == null && sumPayment == null) {
            return 1;
        } else if (sumDiscount == null) {
            return sum.compareTo(sumPayment);
        } else if (sumPayment == null) {
            return sum.compareTo(sumDiscount);
        } else {
            return sum.compareTo(sumDiscount.add(sumPayment));
        }

    }

}
